package com.annotation.demo1;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;

// @Target 注解用于描述注解的使用范围（即：被描述的注解可以用在什么地方）
@Target({FIELD, METHOD})
/*
    TYPE: 类/接口/枚举/注解
    FIELD: 字段(包括枚举常量)
    METHOD: 方法
    PARAMETER: 参数
    CONSTRUCTOR: 构造方法
    LOCAL_VARIABLE: 局部变量
    MODULE: 模块
*/

// @Retention 注解用于描述注解的保留策略（即：被描述的注解在哪个阶段生效）
@Retention(RetentionPolicy.RUNTIME)
/*
    SOURCE: 注解只保留在源文件，当Java文件编译成class文件的时候
    CLASS: 注解只保留在class文件，但会被加载（即：在运行时，注解信息仍然存在，只是不会被加载到内存中）
    RUNTIME: 注解保留在class文件，在运行时，可以被加载到内存中
*/
public @interface MyAnnotation {
    int age();
}
